#pragma once

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

// 两条双向带头循环链表，一条控制书库的流通，一条控制借阅者的流通
// 能用C++就能直接用list或者模板解决了
////////////////////////////////////////////////////////////////////////////////控制书库的流通

typedef struct Book // 1)每种书的登记内容包括书号、书名、著作者、现存量和库存量；
{
	char book_number[20]; // 书号
	char book_name[20]; // 书名
	char auther[20]; // 著作者
	int now_num; // 现存量
	int stock_num; // 库存量
}Book;

typedef Book DLNodeDataType;

typedef struct DoubleListNode
{
	DLNodeDataType data;
	struct DoubleListNode* next;  // 指向后继节点的指针
	struct DoubleListNode* prev;  // 指向前驱节点的指针
}DLNode;

DLNode* DListInit();

DLNode* CreateNewNode(char* booknumber_tmp);
void DListPushBack(DLNode* pHead,char* arr_number);

void PrintOneBook(DLNode* pHead);
void DListPrint(DLNode* pHead);

DLNode* DListFind(DLNode* pHead, char* arr_number);

void DListInsert(DLNode* pos, char* arr_number);

void AddBook(DLNode* pHead);

void BorrowBook(DLNode* pHead, char* arr_number);

void DListDestory(DLNode* pHead);//保持接口函数的一致性就不传二级了，让使用者自己置空

void DListEarse(DLNode* pos);

void DListPopBack(DLNode* pHead, char* arr_number);

void DListPushFront(DLNode* pHead, char* arr_number);

void DListPopFront(DLNode* pHead);

void LoadBook(DLNode* pHead);
void SaveBook(DLNode* pHead);